#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QToolButton>
#include <QDebug>
#include <QVBoxLayout>
#include <QWheelEvent>
#include <QString>
#include <QLabel>
#include <QTimer>
#include <QStack>
#include <QPixmap>
#include <QGraphicsScene>

#include "toolwidget.h"
#include "huabiwidget.h"
#include "cuxiwidget.h"
#include "tuxingwidget.h"
#include "colorwidget.h"
#include "graphicsview.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    void wheelEvent(QWheelEvent* event) override; // 鼠标滚轮事件，控制中间wdiget_huabu的大小
    void moveEvent(QMoveEvent *event) override; // 窗口移动事件，控制工具栏小widget的重新绘制
    void keyPressEvent(QKeyEvent *e); //快捷键按键事件

//    void mouseMoveEvent(QMouseEvent *event) override;
//    void mousePressEvent(QMouseEvent *event) override;
//    void mouseReleaseEvent(QMouseEvent *event) override;
//    bool eventFilter(QObject *watched, QEvent *event) override;

    ~MainWindow();

    void saveInUndo(QGraphicsRectItem *rectangle); //将场景保存到Undo栈

private slots:
    void on_pBtn_tool_clicked();

    void on_pBtn_huabi_clicked();

    void on_pBtn_tuxing_clicked();

    void on_pBtn_cuxi_clicked();

    void on_pBtn_color_clicked();

private:
    Ui::MainWindow *ui;

    // 1.画布逻辑
    qreal m_scaleFactor = 1; // 缩放因子，默认为1
    QPixmap *m_pix; // 初始画布
    QStack<QPixmap> m_UndoPixs; //存放pix的历史，按住ctrl+z，回到上一条图片。每次鼠标release事件结束就记录一次
    QStack<QPixmap> m_RedoPixs; // 重做栈，ctrl+shift+z，反撤销
    QStack<QGraphicsScene *> m_scenes;

    // 2.工具栏子窗口widget逻辑
    ToolWidget *m_toolWidget;
    HuaBiWidget *m_huabiWidget;
    TuXingWidget *m_tuxingWidget;
    CuXiWidget *m_cuxiWidget;
    ColorWidget *m_colorWidget;

    // 3.实现绘画逻辑的成员变量
    QGraphicsScene *m_scene;  // 场景
    GraphicsView *m_graphicsView; //视图
    QPointF m_prePos; // 上一个点位
    QGraphicsRectItem *m_rectangle;  //绘画矩形，所有图片都画上面

    // 4.子窗口的选择控制绘画逻辑
    QString m_drawingMode = "画笔";   //"工具", "画笔", "图形"
    QString m_sonOfDrawingMode = "画笔";
    /***
     * 工具：铅笔，橡皮，文本框，填充
     * 画笔：画笔，虚线
     * 图形：直线，椭圆，矩形，三角形，直角三角形，菱形
     *
     */
    QPen *m_penPencil;
    QPen *m_penRubber;
    QPen *m_penHuabi;  //画笔，用一个
    QPen *m_penTuxing; //图形，用一个
    QColor m_color = Qt::black;
    int m_width = 1;
    bool m_isFilled = false;
    QGraphicsTextItem *m_currentTextItem; // 文本框
    QGraphicsEllipseItem *m_currentEllipse; // 椭圆
    QGraphicsRectItem *m_currentRect; // 矩形
    QGraphicsPolygonItem *m_currentPolygon; // 多边形
    QGraphicsLineItem *m_currentLine; // 线段


    // 5.保存功能
    bool m_hasSaved = false; //是否以及被保存
    QString m_savedPath; // 被保存的路径
};
#endif // MAINWINDOW_H
